Wie kann ich zwischen RGB565 und RGB24 Bildformate in MATLAB-Format konvertieren?
-
01-10-2019 - |
Frage
Ich erhalte eine RGB-Matrix aus einem Mikroprozessor, der ein Bild in RGB565-Format ausgibt. Ich möchte dies in MATLAB lesen, wandeln es in RGB24-Format und gibt das Bild. Wie kann ich das tun?
Lösung
Sie müssen Ihre Daten aus der Textdatei in eine Matrix in MATLAB lesen. Da ich nicht weiß, in welchem ??Format der Textdatei in ist, kann ich nur empfehlen, dass Sie wahrscheinlich benötigen, um die Funktion fscanf
in all Ihren Werten (wahrscheinlich vom Typ uint16
), dann werden Sie wahrscheinlich die Werte in eine N-von-M Bildmatrix mit der Funktion reshape
.
Nehmen wir an, Sie getan haben alles, und Sie haben jetzt eine N-mal-M-Matrix img
von unsigned 16-Bit-Integer. Erstens können Sie die Funktion verwenden bitand
die Bits für die extrahieren rot, grün und blau-Komponenten, deren Positionen in der 16-Bit-integer hier dargestellt sind:
Als nächstes können Sie die Funktion verwenden bitshift
und Multiplikation mit ein Skalierungsfaktor die Rot-, Grün- und blau-Wert zu einem Bereich von 0 bis 255, dann wandelt sie in eine unsigned 8-Bit-Ganzzahl mit der Funktion uint8
. Dies gibt Ihnen drei Farbkomponenten-Matrizen, die die gleiche Größe wie img
:
imgR = uint8((255/31).*bitshift(bitand(img, 63488), -11)); % Red component
imgG = uint8((255/63).*bitshift(bitand(img, 2016), -5)); % Green component
imgB = uint8((255/31).*bitand(img, 31)); % Blue component
Nun können Sie die Funktion cat
die drei platzieren Farbkomponenten in eine N-mal-M-mal-3-RGB-Bildmatrix, dann speichert das Bild in eine RGB24 Bitmap-Datei mit der Funktion imwrite
:
imgRGB = cat(3, imgR, imgG, imgB); % Concatenate along the third dimension
imwrite(imgRGB, 'myImage.bmp'); % Output the image to a file
Beispiel:
eine zufällig erzeugte 100-by-100-Matrix von uint16 Werten verwenden und die oben genannten Umwandlungen Anwendung, hier sind die Ergebnisse:
img = randi([0 65535], 100, 100, 'uint16');
% Perform the above conversions to get imgRGB
subplot(1, 2, 1);
imshow(img);
title('Random uint16 image');
subplot(1, 2, 2);
imshow(imgRGB);
title('Corresponding RGB image');
Andere Tipps
RGB565 Mittel 5-Bit-rot, 6-Bit-grün und 5-Bit-blau. RGB24 ist aus 8-Bit-rot, 8-Bit-grün und 8-Bit-blau.
Mit bitget und bitset Sie Ihre Daten konvertieren kann.
http://www.mathworks.de/access /helpdesk/help/techdoc/ref/bitget.html